从FPGA视角来看DMA中断

您所在的位置:网站首页 zynq vdma中断优先级 从FPGA视角来看DMA中断

从FPGA视角来看DMA中断

2024-07-02 15:31| 来源: 网络整理| 查看: 265

题外话

从学习一些高档的单片机就能看到DMA的作用。DMA可以让外设不经过CPU的干预,直接把数据搬运到内存。这样做不仅仅是体现在不需要CPU干涉,而且能够极大的提高外设数据的吞吐量。举个简单的例子,我们需要用AD转换器去采集50Hz的交流信号,假设采样率是1024次/T。那么需要的AD转换器的采样率是50*1024=51200。在非突发,并行采集的条件下,AD转换器每秒需要中断CPU 51200次。对于百兆的CPU来讲,这个速度还是可以接受的,但是如果要在保证数据不丢失,又要对数据做一些FIR,FFT等操作呢?显然,每次数据采集完成中断CPU的方法已经不能满足这种场景。这时候就可以利用DMA接收完成中断来触发数据处理。再引入一种乒乓操作: A: 在这里插入图片描述 B: 在这里插入图片描述 如上图所示,我们需要在内存中开辟两块缓冲区,在写入A缓冲区的时候去读取B缓冲区,在写入B缓冲区的时候,去读取A缓冲区。对于缓冲,总会想到一个例子,当我们去食堂盛饭,总是需要一个餐具的,食堂工作人员需要先把饭盛到你的盘子中,而不是直接把饭让你去吃掉。想想下如果没有餐具的缓冲,食堂的拥挤程度会翻多少倍,对于数据通常也是这个样子。 言归正传,有个这两个缓冲区, == 我们把DMA的接收完成中断length’设置成51200,那么这个时候,DMA控制器以20ms的周期去中断CPU,加上每次中断切换缓冲区,最终我们为数据处理创造了将近20ms的时间。== 由此可见,在这个方面,DMA给单片机、DSP带来的好处是革命性的。

DMA控制器如何产生中断信号?

上一篇写了在zynq上实现的DMA数据的发送,对于发送来讲,DMA接收显得更加重要,接收属于异步事件,如果没有一种机制让CPU知道这个事件的来临,那么CPU需要一直去检测这个信号。这种资源的浪费是灾难性的,说道这里突然想起以前学习MCU时候的一个疑问,“在两个外设同时中断CPU情况下,优先级高的中断被处理,优先级低的中断有可能被flush掉吗?”现在来看这个问题可以分为两种情况了,地址优先级低的外设中断速度不是那么高,优先级高的中断服务程序执行时间不是那么长。也就是 低优先级外设两次中断间隔时间>高优先级中断的中断服务程序执行时间(这里不考虑中断响应时间)。这种情况下,低优先级中断标志是不会被flush掉的。 在这里插入图片描述看图,外设的中断是从它自己的控制器上给到CPU的。所以第一种情况是没问题的。第二种情况是 低优先级外设两次中断间隔时间



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3